package mutils

import (
	"github.com/zheng-ji/goSnowFlake"
	"strconv"
)

type ApiError struct {
	Code 	int
	Message string
}

const (
//--------------------------------  通用错误码

	ResponseCode_Success 			= 0	//请求成功

	ErrorCode_Sql_Fail  			= 20001	//数据库操作失败

	ErrorCode_Req_Parmas_NoMatch  	= 30001 //请求参数有误

	ErrorCode_Req_Params_NoJson 	= 30002 //请求参数不是json

//-------------------------------   用户相关

	ErrorCode_User_Null 			= 50001 //用户不存在

	ErrorCode_User_GoldLow	 		= 50002 //金豆不足

	ErrorCode_User_JoinFail 		= 50003 //参与游戏失败


//-------------------------------   场次相关

	ErrorCode_Game_Null				= 60001 //没有符合条件的场次信息

	ErrorCode_Game_GoldMax			= 60002 //场次金额已满

	ErrorCode_Game_NoJoiner         = 60003 //暂无参与人次

)

func ApiErrorWithCode(code int) (err ApiError) {
    var message string
	switch code {
	case ErrorCode_Sql_Fail:
		message = "数据库操作失败!"
	case ErrorCode_Req_Parmas_NoMatch:
		message = "请求参数有误!"
	case ErrorCode_Req_Params_NoJson:
		message = "请求参数无法解析！"
	case ErrorCode_User_Null:
		message = "用户不存在!"
	case ErrorCode_User_JoinFail:
		message = "参与游戏失败!"
	case ErrorCode_User_GoldLow:
		message = "账户金豆不足!"
	case ErrorCode_Game_Null:
		message = "没有符合条件的场次"
	case ErrorCode_Game_GoldMax:
		message = "场次金额已最大"
	case ErrorCode_Game_NoJoiner:
		message = "该场次暂无参与人次"

	default:
		message = "未知错误!"
	}
	err = ApiError{Code:code,Message:message}
	return err
}

func ApiErrorWithErrorInfo(err error, code int) (apiError ApiError) {
	var message string
	if err != nil {
		message = ApiErrorWithCode(code).Message + string(err.Error())
	}else {
		message = "未知错误"
	}
	return ApiError{Code:code,Message:message}
}

func ErrorMessage(err error) map[string]interface{}  {
	return map[string]interface{}{"code":0,"message":string(err.Error())}
}

func GetUserIdOnly() (str string) {
	iw, err := goSnowFlake.NewIdWorker(1)
	if err== nil {
		if id, err := iw.NextId(); err == nil {
			return strconv.FormatInt(id,10)
		}
	}
	return "0"
}

func SuccessApiError() (err ApiError)  {
	err = ApiError{Code:ResponseCode_Success,Message:"Success"}
	return err
}